A. Ehab and another construction problem
1 |
|
B. Ehab and subtraction
1 |
|
C. Ehab and a 2-operation task
题意
给定一个长度为$n$的序列,有如下两种操作:
将序列中的前$i$个数加上$x$
将序列中的前$i$个数模$x$
要求使用不多于$n+1$次操作,使该序列变为严格递增。
解法
构造一个模$n+1$答案为1,2,3……n的序列即可。
1 |
|
D. Ehab and another another xor problem
题意
交互题。
有两个数$a,b$,对于每次询问? c d
,返回cmp(a^c,b^d)
的值,要求在62次询问之内求出$a,b$的值,其中$0≤a,b<2^{30}$.
思路
考虑二进制分解,从最高位向下求解。
假设前k位已经确定,对于第k位的值,询问(1,0)
,(0,1)
,有如下情况:
如果$a[k],b[k]$均为0,则
ask(1,0)=1
,ask(0,1)=-1
如果$a[k],b[k]$均为1,则
ask(1,0)=-1
,ask(0,1)=1
如果$a[k]≠b[k]$,则两次返回的值相同,且所得值为后k+1位的比较结果;
对于这种情况,需要在开始时
ask(0,0)
比较$a,b$后k位的大小,并根据比较的返回值更新该值。
代码
1 |
|
E. Ehab and a component choosing problem
题意
给定一个有$n$个结点的树,每个节点的点权为$a_u$.选定k个不相交的联通块,使$\frac{\sum\limits_{u \in s} a_u}{k}$的值最大,如果有多个解,最大化k的值。
思路
如果不需要最大化k的值,显然取k=1,最大联通块的值$w$即为所求解。
对于k>1的情况,只要求出值等于$w$的联通块数量即可求解。
代码
1 |
|
F. Ehab and a weird weight formula
题意
给定一个$n$个节点的树,每个节点有点权$a_u$,该树满足条件:对于树上的每个点(除权值最小的点),必有相邻的点$v$,使$a_v<a_u$。要求构建一棵树,使树的权重最小。生成树的权重计算如下:
- 对于每个点$u$,$w+=deg_u \cdot a_u$($deg_u$为生成树中节点$u$的度)
- 对于树上每条边${u,v}$,$w+=\lceil log_2(dist(u,v)) \rceil \cdot min(a_u,a_v)$,$dist(u,v)$为生成树上点$u,v$间的距离
思路
对于所给的树,有如下性质:对于节点$u$的所有子节点$v$,有$a_v>a_u$.即随着深度的增加,节点点权增加。
那么对于节点$u$,向上求第$1-2^k$倍的祖先节点$v$,用ST表求$\lceil log_2(dist(u,v)) \rceil \cdot min(a_u,a_v)+a[v]$的最小值,即可求出生成树的总权重。
代码
1 |
|